'use strict';

/**
 * AngularJS default filter with the following expression:
 * "person in people | filter: {name: $select.search, age: $select.search}"
 * performs a AND between 'name: $select.search' and 'age: $select.search'.
 * We want to perform a OR.
 */

MetronicApp.filter('propsFilter', function() {
    return function(items, props) {
        var out = [];

        if (angular.isArray(items)) {
            items.forEach(function(item) {
                var itemMatches = false;

                var keys = Object.keys(props);
                for (var i = 0; i < keys.length; i++) {
                    var prop = keys[i];
                    var text = props[prop].toLowerCase();
                    if (item[prop].toString().toLowerCase().indexOf(text) !== -1) {
                        itemMatches = true;
                        break;
                    }
                }

                if (itemMatches) {
                    out.push(item);
                }
            });
        } else {
            // Let the output be the input untouched
            out = items;
        }

        return out;
    };
});

MetronicApp.controller('UISelectController', function($scope, $http, $timeout) {
    $scope.$on('$viewContentLoaded', function() {
        Metronic.initAjax(); // initialize core components
    });

    $scope.disabled = undefined;
    $scope.searchEnabled = undefined;

    $scope.enable = function() {
        $scope.disabled = false;
    };

    $scope.disable = function() {
        $scope.disabled = true;
    };

    $scope.enableSearch = function() {
        $scope.searchEnabled = true;
    }

    $scope.disableSearch = function() {
        $scope.searchEnabled = false;
    }

    $scope.clear = function() {
        $scope.person.selected = undefined;
        $scope.address.selected = undefined;
        $scope.country.selected = undefined;
    };

    $scope.someGroupFn = function(item) {

        if (item.name[0] >= 'A' && item.name[0] <= 'M')
            return 'From A - M';

        if (item.name[0] >= 'N' && item.name[0] <= 'Z')
            return 'From N - Z';

    };

    $scope.personAsync = {
        selected: "wladimir@email.com"
    };
    $scope.peopleAsync = [];

    $timeout(function() {
        $scope.peopleAsync = [{
            name: 'Adam',
            email: 'adam@email.com',
            age: 12,
            country: 'United States'
        }, {
            name: 'Amalie',
            email: 'amalie@email.com',
            age: 12,
            country: 'Argentina'
        }, {
            name: 'Estefanía',
            email: 'estefania@email.com',
            age: 21,
            country: 'Argentina'
        }, {
            name: 'Adrian',
            email: 'adrian@email.com',
            age: 21,
            country: 'Ecuador'
        }, {
            name: 'Wladimir',
            email: 'wladimir@email.com',
            age: 30,
            country: 'Ecuador'
        }, {
            name: 'Samantha',
            email: 'samantha@email.com',
            age: 30,
            country: 'United States'
        }, {
            name: 'Nicole',
            email: 'nicole@email.com',
            age: 43,
            country: 'Colombia'
        }, {
            name: 'Natasha',
            email: 'natasha@email.com',
            age: 54,
            country: 'Ecuador'
        }, {
            name: 'Michael',
            email: 'michael@email.com',
            age: 15,
            country: 'Colombia'
        }, {
            name: 'Nicolás',
            email: 'nicole@email.com',
            age: 43,
            country: 'Colombia'
        }];
    }, 3000);

    $scope.counter = 0;
    $scope.someFunction = function(item, model) {
        $scope.counter++;
        $scope.eventResult = {
            item: item,
            model: model
        };
    };

    $scope.removed = function(item, model) {
        $scope.lastRemoved = {
            item: item,
            model: model
        };
    };

    $scope.person = {};
    $scope.people = [{
        name: 'Adam',
        email: 'adam@email.com',
        age: 12,
        country: 'United States'
    }, {
        name: 'Amalie',
        email: 'amalie@email.com',
        age: 12,
        country: 'Argentina'
    }, {
        name: 'Estefanía',
        email: 'estefania@email.com',
        age: 21,
        country: 'Argentina'
    }, {
        name: 'Adrian',
        email: 'adrian@email.com',
        age: 21,
        country: 'Ecuador'
    }, {
        name: 'Wladimir',
        email: 'wladimir@email.com',
        age: 30,
        country: 'Ecuador'
    }, {
        name: 'Samantha',
        email: 'samantha@email.com',
        age: 30,
        country: 'United States'
    }, {
        name: 'Nicole',
        email: 'nicole@email.com',
        age: 43,
        country: 'Colombia'
    }, {
        name: 'Natasha',
        email: 'natasha@email.com',
        age: 54,
        country: 'Ecuador'
    }, {
        name: 'Michael',
        email: 'michael@email.com',
        age: 15,
        country: 'Colombia'
    }, {
        name: 'Nicolás',
        email: 'nicolas@email.com',
        age: 43,
        country: 'Colombia'
    }];

    $scope.availableColors = ['Red', 'Green', 'Blue', 'Yellow', 'Magenta', 'Maroon', 'Umbra', 'Turquoise'];

    $scope.multipleDemo = {};
    $scope.multipleDemo.colors = ['Blue', 'Red'];
    $scope.multipleDemo.selectedPeople = [$scope.people[5], $scope.people[4]];
    $scope.multipleDemo.selectedPeopleWithGroupBy = [$scope.people[8], $scope.people[6]];
    $scope.multipleDemo.selectedPeopleSimple = ['samantha@email.com', 'wladimir@email.com'];


    $scope.address = {};
    $scope.refreshAddresses = function(address) {
        var params = {
            address: address,
            sensor: false
        };
        return $http.get(
            'http://maps.googleapis.com/maps/api/geocode/json', {
                params: params
            }
        ).then(function(response) {
            $scope.addresses = response.data.results;
        });
    };

    $scope.country = {};
    $scope.countries = [ // Taken from https://gist.github.com/unceus/6501985
        {
            name: 'Afghanistan',
            code: 'AF'
        }, {
            name: 'Åland Islands',
            code: 'AX'
        }, {
            name: 'Albania',
            code: 'AL'
        }, {
            name: 'Algeria',
            code: 'DZ'
        }, {
            name: 'American Samoa',
            code: 'AS'
        }, {
            name: 'Andorra',
            code: 'AD'
        }, {
            name: 'Angola',
            code: 'AO'
        }, {
            name: 'Anguilla',
            code: 'AI'
        }, {
            name: 'Antarctica',
            code: 'AQ'
        }, {
            name: 'Antigua and Barbuda',
            code: 'AG'
        }, {
            name: 'Argentina',
            code: 'AR'
        }, {
            name: 'Armenia',
            code: 'AM'
        }, {
            name: 'Aruba',
            code: 'AW'
        }, {
            name: 'Australia',
            code: 'AU'
        }, {
            name: 'Austria',
            code: 'AT'
        }, {
            name: 'Azerbaijan',
            code: 'AZ'
        }, {
            name: 'Bahamas',
            code: 'BS'
        }, {
            name: 'Bahrain',
            code: 'BH'
        }, {
            name: 'Bangladesh',
            code: 'BD'
        }, {
            name: 'Barbados',
            code: 'BB'
        }, {
            name: 'Belarus',
            code: 'BY'
        }, {
            name: 'Belgium',
            code: 'BE'
        }, {
            name: 'Belize',
            code: 'BZ'
        }, {
            name: 'Benin',
            code: 'BJ'
        }, {
            name: 'Bermuda',
            code: 'BM'
        }, {
            name: 'Bhutan',
            code: 'BT'
        }, {
            name: 'Bolivia',
            code: 'BO'
        }, {
            name: 'Bosnia and Herzegovina',
            code: 'BA'
        }, {
            name: 'Botswana',
            code: 'BW'
        }, {
            name: 'Bouvet Island',
            code: 'BV'
        }, {
            name: 'Brazil',
            code: 'BR'
        }, {
            name: 'British Indian Ocean Territory',
            code: 'IO'
        }, {
            name: 'Brunei Darussalam',
            code: 'BN'
        }, {
            name: 'Bulgaria',
            code: 'BG'
        }, {
            name: 'Burkina Faso',
            code: 'BF'
        }, {
            name: 'Burundi',
            code: 'BI'
        }, {
            name: 'Cambodia',
            code: 'KH'
        }, {
            name: 'Cameroon',
            code: 'CM'
        }, {
            name: 'Canada',
            code: 'CA'
        }, {
            name: 'Cape Verde',
            code: 'CV'
        }, {
            name: 'Cayman Islands',
            code: 'KY'
        }, {
            name: 'Central African Republic',
            code: 'CF'
        }, {
            name: 'Chad',
            code: 'TD'
        }, {
            name: 'Chile',
            code: 'CL'
        }, {
            name: 'China',
            code: 'CN'
        }, {
            name: 'Christmas Island',
            code: 'CX'
        }, {
            name: 'Cocos (Keeling) Islands',
            code: 'CC'
        }, {
            name: 'Colombia',
            code: 'CO'
        }, {
            name: 'Comoros',
            code: 'KM'
        }, {
            name: 'Congo',
            code: 'CG'
        }, {
            name: 'Congo, The Democratic Republic of the',
            code: 'CD'
        }, {
            name: 'Cook Islands',
            code: 'CK'
        }, {
            name: 'Costa Rica',
            code: 'CR'
        }, {
            name: 'Cote D\'Ivoire',
            code: 'CI'
        }, {
            name: 'Croatia',
            code: 'HR'
        }, {
            name: 'Cuba',
            code: 'CU'
        }, {
            name: 'Cyprus',
            code: 'CY'
        }, {
            name: 'Czech Republic',
            code: 'CZ'
        }, {
            name: 'Denmark',
            code: 'DK'
        }, {
            name: 'Djibouti',
            code: 'DJ'
        }, {
            name: 'Dominica',
            code: 'DM'
        }, {
            name: 'Dominican Republic',
            code: 'DO'
        }, {
            name: 'Ecuador',
            code: 'EC'
        }, {
            name: 'Egypt',
            code: 'EG'
        }, {
            name: 'El Salvador',
            code: 'SV'
        }, {
            name: 'Equatorial Guinea',
            code: 'GQ'
        }, {
            name: 'Eritrea',
            code: 'ER'
        }, {
            name: 'Estonia',
            code: 'EE'
        }, {
            name: 'Ethiopia',
            code: 'ET'
        }, {
            name: 'Falkland Islands (Malvinas)',
            code: 'FK'
        }, {
            name: 'Faroe Islands',
            code: 'FO'
        }, {
            name: 'Fiji',
            code: 'FJ'
        }, {
            name: 'Finland',
            code: 'FI'
        }, {
            name: 'France',
            code: 'FR'
        }, {
            name: 'French Guiana',
            code: 'GF'
        }, {
            name: 'French Polynesia',
            code: 'PF'
        }, {
            name: 'French Southern Territories',
            code: 'TF'
        }, {
            name: 'Gabon',
            code: 'GA'
        }, {
            name: 'Gambia',
            code: 'GM'
        }, {
            name: 'Georgia',
            code: 'GE'
        }, {
            name: 'Germany',
            code: 'DE'
        }, {
            name: 'Ghana',
            code: 'GH'
        }, {
            name: 'Gibraltar',
            code: 'GI'
        }, {
            name: 'Greece',
            code: 'GR'
        }, {
            name: 'Greenland',
            code: 'GL'
        }, {
            name: 'Grenada',
            code: 'GD'
        }, {
            name: 'Guadeloupe',
            code: 'GP'
        }, {
            name: 'Guam',
            code: 'GU'
        }, {
            name: 'Guatemala',
            code: 'GT'
        }, {
            name: 'Guernsey',
            code: 'GG'
        }, {
            name: 'Guinea',
            code: 'GN'
        }, {
            name: 'Guinea-Bissau',
            code: 'GW'
        }, {
            name: 'Guyana',
            code: 'GY'
        }, {
            name: 'Haiti',
            code: 'HT'
        }, {
            name: 'Heard Island and Mcdonald Islands',
            code: 'HM'
        }, {
            name: 'Holy See (Vatican City State)',
            code: 'VA'
        }, {
            name: 'Honduras',
            code: 'HN'
        }, {
            name: 'Hong Kong',
            code: 'HK'
        }, {
            name: 'Hungary',
            code: 'HU'
        }, {
            name: 'Iceland',
            code: 'IS'
        }, {
            name: 'India',
            code: 'IN'
        }, {
            name: 'Indonesia',
            code: 'ID'
        }, {
            name: 'Iran, Islamic Republic Of',
            code: 'IR'
        }, {
            name: 'Iraq',
            code: 'IQ'
        }, {
            name: 'Ireland',
            code: 'IE'
        }, {
            name: 'Isle of Man',
            code: 'IM'
        }, {
            name: 'Israel',
            code: 'IL'
        }, {
            name: 'Italy',
            code: 'IT'
        }, {
            name: 'Jamaica',
            code: 'JM'
        }, {
            name: 'Japan',
            code: 'JP'
        }, {
            name: 'Jersey',
            code: 'JE'
        }, {
            name: 'Jordan',
            code: 'JO'
        }, {
            name: 'Kazakhstan',
            code: 'KZ'
        }, {
            name: 'Kenya',
            code: 'KE'
        }, {
            name: 'Kiribati',
            code: 'KI'
        }, {
            name: 'Korea, Democratic People\'s Republic of',
            code: 'KP'
        }, {
            name: 'Korea, Republic of',
            code: 'KR'
        }, {
            name: 'Kuwait',
            code: 'KW'
        }, {
            name: 'Kyrgyzstan',
            code: 'KG'
        }, {
            name: 'Lao People\'s Democratic Republic',
            code: 'LA'
        }, {
            name: 'Latvia',
            code: 'LV'
        }, {
            name: 'Lebanon',
            code: 'LB'
        }, {
            name: 'Lesotho',
            code: 'LS'
        }, {
            name: 'Liberia',
            code: 'LR'
        }, {
            name: 'Libyan Arab Jamahiriya',
            code: 'LY'
        }, {
            name: 'Liechtenstein',
            code: 'LI'
        }, {
            name: 'Lithuania',
            code: 'LT'
        }, {
            name: 'Luxembourg',
            code: 'LU'
        }, {
            name: 'Macao',
            code: 'MO'
        }, {
            name: 'Macedonia, The Former Yugoslav Republic of',
            code: 'MK'
        }, {
            name: 'Madagascar',
            code: 'MG'
        }, {
            name: 'Malawi',
            code: 'MW'
        }, {
            name: 'Malaysia',
            code: 'MY'
        }, {
            name: 'Maldives',
            code: 'MV'
        }, {
            name: 'Mali',
            code: 'ML'
        }, {
            name: 'Malta',
            code: 'MT'
        }, {
            name: 'Marshall Islands',
            code: 'MH'
        }, {
            name: 'Martinique',
            code: 'MQ'
        }, {
            name: 'Mauritania',
            code: 'MR'
        }, {
            name: 'Mauritius',
            code: 'MU'
        }, {
            name: 'Mayotte',
            code: 'YT'
        }, {
            name: 'Mexico',
            code: 'MX'
        }, {
            name: 'Micronesia, Federated States of',
            code: 'FM'
        }, {
            name: 'Moldova, Republic of',
            code: 'MD'
        }, {
            name: 'Monaco',
            code: 'MC'
        }, {
            name: 'Mongolia',
            code: 'MN'
        }, {
            name: 'Montserrat',
            code: 'MS'
        }, {
            name: 'Morocco',
            code: 'MA'
        }, {
            name: 'Mozambique',
            code: 'MZ'
        }, {
            name: 'Myanmar',
            code: 'MM'
        }, {
            name: 'Namibia',
            code: 'NA'
        }, {
            name: 'Nauru',
            code: 'NR'
        }, {
            name: 'Nepal',
            code: 'NP'
        }, {
            name: 'Netherlands',
            code: 'NL'
        }, {
            name: 'Netherlands Antilles',
            code: 'AN'
        }, {
            name: 'New Caledonia',
            code: 'NC'
        }, {
            name: 'New Zealand',
            code: 'NZ'
        }, {
            name: 'Nicaragua',
            code: 'NI'
        }, {
            name: 'Niger',
            code: 'NE'
        }, {
            name: 'Nigeria',
            code: 'NG'
        }, {
            name: 'Niue',
            code: 'NU'
        }, {
            name: 'Norfolk Island',
            code: 'NF'
        }, {
            name: 'Northern Mariana Islands',
            code: 'MP'
        }, {
            name: 'Norway',
            code: 'NO'
        }, {
            name: 'Oman',
            code: 'OM'
        }, {
            name: 'Pakistan',
            code: 'PK'
        }, {
            name: 'Palau',
            code: 'PW'
        }, {
            name: 'Palestinian Territory, Occupied',
            code: 'PS'
        }, {
            name: 'Panama',
            code: 'PA'
        }, {
            name: 'Papua New Guinea',
            code: 'PG'
        }, {
            name: 'Paraguay',
            code: 'PY'
        }, {
            name: 'Peru',
            code: 'PE'
        }, {
            name: 'Philippines',
            code: 'PH'
        }, {
            name: 'Pitcairn',
            code: 'PN'
        }, {
            name: 'Poland',
            code: 'PL'
        }, {
            name: 'Portugal',
            code: 'PT'
        }, {
            name: 'Puerto Rico',
            code: 'PR'
        }, {
            name: 'Qatar',
            code: 'QA'
        }, {
            name: 'Reunion',
            code: 'RE'
        }, {
            name: 'Romania',
            code: 'RO'
        }, {
            name: 'Russian Federation',
            code: 'RU'
        }, {
            name: 'Rwanda',
            code: 'RW'
        }, {
            name: 'Saint Helena',
            code: 'SH'
        }, {
            name: 'Saint Kitts and Nevis',
            code: 'KN'
        }, {
            name: 'Saint Lucia',
            code: 'LC'
        }, {
            name: 'Saint Pierre and Miquelon',
            code: 'PM'
        }, {
            name: 'Saint Vincent and the Grenadines',
            code: 'VC'
        }, {
            name: 'Samoa',
            code: 'WS'
        }, {
            name: 'San Marino',
            code: 'SM'
        }, {
            name: 'Sao Tome and Principe',
            code: 'ST'
        }, {
            name: 'Saudi Arabia',
            code: 'SA'
        }, {
            name: 'Senegal',
            code: 'SN'
        }, {
            name: 'Serbia and Montenegro',
            code: 'CS'
        }, {
            name: 'Seychelles',
            code: 'SC'
        }, {
            name: 'Sierra Leone',
            code: 'SL'
        }, {
            name: 'Singapore',
            code: 'SG'
        }, {
            name: 'Slovakia',
            code: 'SK'
        }, {
            name: 'Slovenia',
            code: 'SI'
        }, {
            name: 'Solomon Islands',
            code: 'SB'
        }, {
            name: 'Somalia',
            code: 'SO'
        }, {
            name: 'South Africa',
            code: 'ZA'
        }, {
            name: 'South Georgia and the South Sandwich Islands',
            code: 'GS'
        }, {
            name: 'Spain',
            code: 'ES'
        }, {
            name: 'Sri Lanka',
            code: 'LK'
        }, {
            name: 'Sudan',
            code: 'SD'
        }, {
            name: 'Suriname',
            code: 'SR'
        }, {
            name: 'Svalbard and Jan Mayen',
            code: 'SJ'
        }, {
            name: 'Swaziland',
            code: 'SZ'
        }, {
            name: 'Sweden',
            code: 'SE'
        }, {
            name: 'Switzerland',
            code: 'CH'
        }, {
            name: 'Syrian Arab Republic',
            code: 'SY'
        }, {
            name: 'Taiwan, Province of China',
            code: 'TW'
        }, {
            name: 'Tajikistan',
            code: 'TJ'
        }, {
            name: 'Tanzania, United Republic of',
            code: 'TZ'
        }, {
            name: 'Thailand',
            code: 'TH'
        }, {
            name: 'Timor-Leste',
            code: 'TL'
        }, {
            name: 'Togo',
            code: 'TG'
        }, {
            name: 'Tokelau',
            code: 'TK'
        }, {
            name: 'Tonga',
            code: 'TO'
        }, {
            name: 'Trinidad and Tobago',
            code: 'TT'
        }, {
            name: 'Tunisia',
            code: 'TN'
        }, {
            name: 'Turkey',
            code: 'TR'
        }, {
            name: 'Turkmenistan',
            code: 'TM'
        }, {
            name: 'Turks and Caicos Islands',
            code: 'TC'
        }, {
            name: 'Tuvalu',
            code: 'TV'
        }, {
            name: 'Uganda',
            code: 'UG'
        }, {
            name: 'Ukraine',
            code: 'UA'
        }, {
            name: 'United Arab Emirates',
            code: 'AE'
        }, {
            name: 'United Kingdom',
            code: 'GB'
        }, {
            name: 'United States',
            code: 'US'
        }, {
            name: 'United States Minor Outlying Islands',
            code: 'UM'
        }, {
            name: 'Uruguay',
            code: 'UY'
        }, {
            name: 'Uzbekistan',
            code: 'UZ'
        }, {
            name: 'Vanuatu',
            code: 'VU'
        }, {
            name: 'Venezuela',
            code: 'VE'
        }, {
            name: 'Vietnam',
            code: 'VN'
        }, {
            name: 'Virgin Islands, British',
            code: 'VG'
        }, {
            name: 'Virgin Islands, U.S.',
            code: 'VI'
        }, {
            name: 'Wallis and Futuna',
            code: 'WF'
        }, {
            name: 'Western Sahara',
            code: 'EH'
        }, {
            name: 'Yemen',
            code: 'YE'
        }, {
            name: 'Zambia',
            code: 'ZM'
        }, {
            name: 'Zimbabwe',
            code: 'ZW'
        }
    ];
});